package com.base.logistics.sf.bean.print;

import cn.hutool.core.util.IdUtil;
import com.base.logistics.config.SfConfig;
import com.base.logistics.utils.SfGsonBuilder;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * <pre>
 * 打印数据请求对象
 * </pre>
 * @since 2021-03-06
 */
public class PrintSfOrderRequest implements Serializable {

    /**
     * 接口服务代码
     */
    private static final String SERVICE_CODE = "COM_RECE_CLOUD_PRINT_WAYBILLS";

    /**
     * 请求的命令：print：打印preview：预览getPrinters：获取打印机列表
     * <pre>
     * 是否必填： 是
     * </pre>
     */
    private String commond;

    /**
     * 发送请求中的ID,原封不动返回，使客户端能识别出哪个请求对应的响应
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private String requestID;

    /**
     * 模板编码
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private String templateCode;

    /**
     * 云打印文件类型(image,pdf)
     */
    private String fileType;

    /**
     * 扩展属性，指定打印机，指定打印哪一联等参数举例如下：{"printerName":"GnetPrinter", "areas":["master"]}
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private Map<String,Object> attributes;

    /**
     * 面单数据
     * <pre>
     * 是否必填： 是
     * </pre>
     */
    private List<PrintSfOrderDocument> documents;


    public PrintSfOrderRequest(SfConfig config){
        this.fileType = config.getFileType();
        this.templateCode = config.getPrintTemplateCode();
        this.requestID = IdUtil.fastSimpleUUID();
    }

    /**
     * 转json
     * @return json数据
     */
    public String toJson() {
        return SfGsonBuilder.create().toJson(this);
    }

    public String getServiceCode() {
        return SERVICE_CODE;
    }

    public String getFileType() {
        return fileType;
    }

    public void setFileType(String fileType) {
        this.fileType = fileType;
    }

    public String getCommond() {
        return this.commond;
    }

    public String getRequestID() {
        return this.requestID;
    }

    public String getTemplateCode() {
        return this.templateCode;
    }

    public Map<String, Object> getAttributes() {
        return this.attributes;
    }

    public List<PrintSfOrderDocument> getDocuments() {
        return this.documents;
    }

    public void setCommond(String commond) {
        this.commond = commond;
    }

    public void setRequestID(String requestID) {
        this.requestID = requestID;
    }

    public void setTemplateCode(String templateCode) {
        this.templateCode = templateCode;
    }

    public void setAttributes(Map<String, Object> attributes) {
        this.attributes = attributes;
    }

    public void setDocuments(List<PrintSfOrderDocument> documents) {
        this.documents = documents;
    }

}
